#ifndef STX_ALGORITHM_MAX_HPP
#define STX_ALGORITHM_MAX_HPP

#include <stx/algorithm/common.hpp>
#include <stx/algorithm/max_element.hpp>

namespace stx {

template <class T, class Compare>
inline const T&
max(const T& a, const T& b, Compare comp)
{
    return comp(a, b) ? b : a;
}

template <class T>
inline const T&
max(const T& a, const T& b)
{
    return stx::max(a, b, stx::less<T>());
}

#ifdef STX_CPP11

template<class T, class Compare>
inline T
max(std::initializer_list<T> t, Compare comp)
{
    return *stx::max_element(t.begin(), t.end(), comp);
}

template<class T>
inline T
max(std::initializer_list<T> t)
{
    return *stx::max_element(t.begin(), t.end());
}

#endif

} // namespace stx

#endif // STX_ALGORITHM_MAX_HPP
